/*******************************************************************************
 * FilePath    : /Software/Examples_Ble_MS1642/ble_app_peripheral_uart_simple/Src/BSP/UART.h
 * Version     : 1.0
 * Brief       :
 * Author      : AndrewHu
 * Company     : Shanghai MacroGiga Electronics CO.,Ltd
 * Email       : Hubinbo@macrogiga.com
 * Date        : 2020-03-24 15:56:39
 * LastEditors : AndrewHu
 * LastEditTime: 2022-12-22 15:14:35
 * Description :
 ******************************************************************************/
#ifndef __MG_UART_H__
#define __MG_UART_H__
/* Includes ------------------------------------------------------------------*/
#include <Includes.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define UARTx USART1
#define BAUDRATE 115200
#define UARTx_TX_PORT GPIOB
#define UARTx_TX_PIN GPIO_PIN_6
#define UARTx_RX_PORT GPIOB
#define UARTx_RX_PIN GPIO_PIN_7
#define UARTx_TX_ALTERNATE_AFn GPIO_AF0_USART1
#define UARTx_RX_ALTERNATE_AFn GPIO_AF0_USART1
#define UARTx_IRQn USART1_IRQn
#define UARTx_IRQHandler USART1_IRQHandler

#define UARTx_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
#define UARTx_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define UARTx_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()

#define UARTx_FORCE_RESET() __HAL_RCC_USART1_FORCE_RESET()
#define UARTx_RELEASE_RESET() __HAL_RCC_USART1_RELEASE_RESET()
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function ----------------------------------------------------------*/
/* extern --------------------------------------------------------------------*/

/*******************************************************************************
 * Function    : Uart_Init
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-24 16:28:55
 * Description : 串口初始化
 ******************************************************************************/
void Uart_Init(void);
/*******************************************************************************
 * Function    : UART0_INT_Callback
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-24 18:10:54
 * Description : 串口中断
 ******************************************************************************/
void UART_INT_Callback(void);
/*******************************************************************************
 * Function    : Uart_Send_Byte
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-24 18:28:52
 * Description : 串口发送一个字节
 ******************************************************************************/
void Uart_Send_Byte(u8 data);
/*******************************************************************************
 * Function    : Uart_Send_Byte2Ascii
 * Brief       :
 * Parameter   : {u8} data-待发送数据
 * Returns     :
 * Date        : 2020-03-24 18:30:09
 * Description : 串口发送一个字节（转换成ASCII）
 ******************************************************************************/
void Uart_Send_Byte2Ascii(u8 data);
/*******************************************************************************
 * Function    : Uart_Send_Array
 * Brief       :
 * Parameter   : {u8*} data-待发送数组
 * Parameter   : {u8} len-数组长度
 * Returns     :
 * Date        : 2020-03-24 18:30:47
 * Description : 发送一个数组（原始数据）
 ******************************************************************************/
void Uart_Send_Array(u8 *data, u8 len);
/*******************************************************************************
 * Function    : Uart_Send_Array_R
 * Brief       :
 * Parameter   : {u8*} data-待发送数组
 * Parameter   : {u8} len-数组长度
 * Returns     :
 * Date        : 2020-03-24 18:30:47
 * Description : 发送一个数组（原始数据），倒序
 ******************************************************************************/
void Uart_Send_Array_R(u8 *data, u8 len);
/*******************************************************************************
 * Function    : Uart_Send_Array2Ascii
 * Brief       :
 * Parameter   : {u8*} data-待发送数组
 * Parameter   : {u8} len-数组长度
 * Parameter   : {u8} space-是否空格做间隔
 * Returns     :
 * Date        : 2020-03-24 18:30:47
 * Description : 发送一个数组（转成ASCII）
 ******************************************************************************/
void Uart_Send_Array2Ascii(u8 *data, u8 len, u8 space);
/*******************************************************************************
 * Function    : Uart_Send_Array2Ascii_R
 * Brief       :
 * Parameter   : {u8*} data-待发送数组
 * Parameter   : {u8} len-数组长度
 * Parameter   : {u8} space-是否空格做间隔
 * Returns     :
 * Date        : 2020-03-24 18:30:47
 * Description : 发送一个数组（转成ASCII），倒序
 ******************************************************************************/
void Uart_Send_Array2Ascii_R(u8 *data, u8 len, u8 space);
/*******************************************************************************
 * Function    : Uart_Send_String
 * Brief       :
 * Parameter   : {u8*} data-字符串或数组
 * Returns     : {u8} len-长度
 * Date        : 2020-03-24 18:48:47
 * Description : 发送一个字符串或数组
 ******************************************************************************/
void Uart_Send_String(u8 *data, u8 len);
/*******************************************************************************
 * Function    : Printf_OK
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-24 18:50:22
 * Description :
 ******************************************************************************/
void Printf_OK(void);
/*******************************************************************************
 * Function    : Printf_Error
 * Brief       :
 * Parameter   : {u8} Num-error of number
 * Returns     :
 * Date        : 2020-03-24 18:50:59
 * Description :
 ******************************************************************************/
void Printf_Error(u8 Num);
/*******************************************************************************
 * Function    : GetUartTxFlag
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-25 15:16:44
 * Description : 获取串口发送状态
 ******************************************************************************/
u8 GetUartTxFlag(void);
/*******************************************************************************
 * Function    : GetUartStatus
 * Brief       : 获取串口工作状态
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-25 15:16:44
 * Description :
 ******************************************************************************/
u8 GetUartStatus(void);
/*******************************************************************************
 * Function    : Fun_Uart_Run
 * Brief       :
 * Parameter   :
 * Returns     :
 * Date        : 2020-03-24 19:02:19
 * Description : 串口执行
 ******************************************************************************/
void Fun_Uart_Run(void);
#endif
